package org.example.translation;

import org.dom4j.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.HashSet;
import java.util.List;

/**
 * 增量翻译
 * 不会对原有的内容进行修改，只生成并添加不存在的条目
 * 如果需要进行部分条目强制翻译，通过构造函数填入强制翻译的name值。
 */
public class FilledTranslationConsumer extends AbsTranslationConsumer {

    /**
     * 必定翻译的条目name集合
     */
    private final HashSet<String> mustBeTranslationSet = new HashSet<>();

    public FilledTranslationConsumer() {

    }

    public FilledTranslationConsumer(List<String> mustBeTranslationList) {
        mustBeTranslationSet.addAll(mustBeTranslationList);
    }

    /**
     * 空节点时进行翻译
     * @param sourceKey          源语言条目Name属性
     * @param sourceElement      源语言条目
     * @param translationElement 需要翻译的语言条目
     * @return 是否翻译
     */
    @Override
    protected boolean stringTranslationPredicate(String sourceKey, @NotNull Element sourceElement, @Nullable Element translationElement) {
        return translationElement == null || mustBeTranslationSet.contains(sourceKey);
    }

    /**
     * 空节点时进行翻译
     * @param sourceElement           源语言标签
     * @param translationElement      目标语言标签
     * @param sourceItemElements      源语言条目内容
     * @param translationItemElements 目标语言条目内容
     * @return 是否翻译
     */
    @Override
    protected boolean stringArrayTranslationPredicate(Element sourceElement, Element translationElement, List<?> sourceItemElements, List<?> translationItemElements) {
        return translationElement == null;
    }

    /**
     * 空节点时进行翻译
     * @param sourceItemElement  源语言标签
     * @param translationElement 目标语言标签
     * @return 是否翻译
     */
    @Override
    protected boolean stringArrayItemTranslationPredicate(Element sourceItemElement, Element translationElement) {
        return translationElement == null;
    }
}
